<xs:schema
  xmlns:xs="http://www.w3.org/2001/XMLSchema"
  targetNamespace="http://www.example.com/Address"
  xmlns="http://www.example.com/Address"
  elementFormDefault="qualified">

  <xs:element name="Address" type="USAddress"/>

  <xs:complexType name="IntlStreetAddress">
    <xs:sequence>
      <xs:element name="Street" type="xs:string"/>
      <xs:element name="City" type="xs:string"/>
      <xs:element name="Zip" type="xs:int"/>
      <xs:element name="State" type="xs:string"/>
    </xs:sequence>
    <xs:attribute name="Country" type="xs:string" default="US"/>
  </xs:complexType>
  
  <xs:complexType name="USAddress">
    <xs:sequence>
      <xs:choice>
        <xs:element name="Street" type="xs:string"/>
        <xs:element name="POBox" type="xs:int"/>
      </xs:choice>
      <xs:element name="City" type="xs:string"/>
      <xs:element name="Zip" type="xs:int"/>
      <xs:element name="State" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="USStreetAddress1">
    <xs:sequence>
      <xs:element name="Street1" type="xs:string"/>
      <xs:element name="Street2" type="xs:string"/>
      <xs:element name="City" type="xs:string"/>
      <xs:element name="Zip" type="xs:int"/>
      <xs:element name="State" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="USStreetAddress2">
    <xs:sequence>
      <xs:element name="Street" type="xs:string"/>
      <xs:element name="Street" type="xs:string" minOccurs="0"/>
      <xs:element name="City" type="xs:string"/>
      <xs:element name="Zip" type="xs:int"/>
      <xs:element name="State" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>

</xs:schema>